package com.itfenghuang.day08;

import java.util.TreeSet;

/*
        set集合的实现类之一:TreeSet
     */
public class A05_TreeSet {
    /*
        1.概述
            是一个可以进行排序的集合
                特点: 不可重复,无索引,可以将元素按照规则排序
        2.构造方法
            public TreeSet()
            public TreeSet(Comparator<? super E>comparator)
        3.自然排序
                自定义类实现Comparable接口,重写compareTo()方法
                实现步骤:
                1.使用空参构造创建TreeSet对象
                2.自定义类要实现一个接口Comparable接口,重写compareTo()方法
                3.在compareTo()方法中指定排序规则
                    如果返回值是正数:表示当前存入的元素是较大值,存右边
                    如果返回值是负数:表示当前要存入存入的元素是较小值,存在比较值元素的左边
                    如果返回值是0:表示当前要存入的元素重复,不存
                    注意:Comparable接口有一个泛型,在实现该接口的时候,集合中的元素是什么类型
                        泛型中就写什么类型
        4.需求:使用TreeSet集合存储学生对象并遍历,要求:集合元素按照年龄排序,如果年龄相同
                按照名字字母顺序排序,如果名字相同,就认为是同一个人
            分析:


     */
    public static void main(String[] args) {

        TreeSet<Integer> xx = new TreeSet<>();
        xx.add(2);
        xx.add(1);
        xx.add(4);
        xx.add(3);
        System.out.println(xx);

        TreeSet<String> xx1 = new TreeSet<>();
        xx1.add("asd");
        xx1.add("acd");
        System.out.println(xx1);

        TreeSet<Student> aa = new TreeSet<>();
        aa.add(new Student("小老鼠",19,"公"));
        aa.add(new Student("小猫咪",18,"母"));
        aa.add(new Student("小狗狗",21,"公"));
        aa.add(new Student("小狮子",20,"公"));
        aa.add(new Student("小狮子",20,"公"));
        System.out.println(aa);
    }

}
class Student implements Comparable<Student>{
    private String name;
    private int age;
    private String gender;

    public Student() {
    }

    public Student(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
    /*
        o 依次代表集合中已经存在的每一个元素
        this:要存入集合的元素
     */
//    @Override
//    public int compareTo(Student o) {
//        条件
//        三元运算符: 格式:表达式?值1:值2
//        int i = this.age-o.age>0?1:-1;
//        return i;

// 4.需求打开
    @Override
    public int compareTo(Student o) {
//        主要条件  年龄排序
        int i = this.age-o.age>=0?this.age-o.age:-1;
//        次要条件   名字排序
        int result = i == 0 ? this.name.compareTo(o.name):i;
        return result;
    }

}